<?php
namespace app\Utils;
use app\Models\AdminConfig;
/**
 * 公共函数定义文件
 */


if(!function_exists('sys_config')){
	/**
	 * 获取系统配置表配置
	 * @Author MrGuo
	 * @Date   2020-08-07
	 * @param  string     $key [字段名]
	 * @return [type]          [description]
 	*/
	function sys_config(string $key=''){
		$config=AdminConfig::getConfig($key);
		return $config;
	}
}
if(!function_exists('rand_string')){
 	/**
     * 生成随机字符串
     * @param int $length 生成长度
     * @param int $type 生成类型：0-小写字母+数字，1-小写字母，2-大写字母，3-数字，4-小写+大写字母，5-小写+大写+数字
     * @author 蔡伟明 <314013107@qq.com>
     * @return string
     */
    function rand_string($length = 8, $type = 0) {
        $a = 'abcdefghijklmnopqrstuvwxyz';
        $A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $n = '0123456789';

        switch ($type) {
            case 1: $chars = $a; break;
            case 2: $chars = $A; break;
            case 3: $chars = $n; break;
            case 4: $chars = $a.$A; break;
            case 5: $chars = $a.$A.$n; break;
            default: $chars = $a.$n;
        }

        $str = '';
        for ($i = 0; $i < $length; $i++) {
            $str .= $chars[ mt_rand(0, strlen($chars) - 1) ];
        }
        return $str;
    }
}

if (!function_exists('format_bytes')) {
    /**
     * 格式化字节大小
     * @param  number $size      字节数
     * @param  string $delimiter 数字和单位分隔符
     * @return string            格式化后的带单位的大小
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    function format_bytes($size, $delimiter = '') {
        $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
        for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
        return round($size, 2) . $delimiter . $units[$i];
    }
}
if (!function_exists('get_client_ip')) {
    /**
     * 获取客户端IP地址
     * @param int $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
     * @param bool $adv 是否进行高级模式获取（有可能被伪装）
     * @return mixed
     */
    function get_client_ip($type = 0, $adv = false) {
        $type       =  $type ? 1 : 0;
        static $ip  =   NULL;
        if ($ip !== NULL) return $ip[$type];
        if($adv){
            if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
                $pos    =   array_search('unknown',$arr);
                if(false !== $pos) unset($arr[$pos]);
                $ip     =   trim($arr[0]);
            }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
                $ip     =   $_SERVER['HTTP_CLIENT_IP'];
            }elseif (isset($_SERVER['REMOTE_ADDR'])) {
                $ip     =   $_SERVER['REMOTE_ADDR'];
            }
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        // IP地址合法验证
        $long = sprintf("%u",ip2long($ip));
        $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
        return $ip[$type];
    }
}
if(!function_exists("array_field_sort")){
    /**
     * 二维数组根据某个字段进行重新排序
     * @Author MrGuo           <gj2517@qq.com>
     * @param  array           $arr            [数组]
     * @param  string          $field          [要排序的字段]
     * @param  string          $desc           [排序方式 desc, asc]
     * @param  boolval|boolean $number         [是否重置键名为数字]
     * @return [array]                         
     */
    function array_field_sort(array $arr=[],string $field='',string $desc="desc", $number=false){
        $arr2=[];
      foreach($arr as $k=>$v){
        if(isset($v[$field])){ 
          if(isset($arr2[$v[$field]])){
            $arr2[$v[$field].".".$k]=$v;
          }else{
            $arr2[$v[$field]]=$v;
          }
        }else{
             $arr2[$k]=$v; 
        }
      } 
      if(strtoupper($desc)=="DESC"){
        krsort($arr2);
      }else{
        ksort($arr2);
      } 
      if($number){
        $arr3=[];
        foreach ($arr2 as $k => $v) {
          array_push($arr3,$v);
        }
        return $arr3;
      }
      return $arr2;
    }
}
